import pandas as pd
import tensorflow as tf
import GetFrameInputOk as gf_input
from tensorflow import keras
import json
import warnings
import sys
from io import StringIO
import absl.logging as absl_logging
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1' 

absl_logging.set_verbosity(absl_logging.ERROR)



# Создаем объект для перенаправления вывода
dummy_out = StringIO()

# Сохраняем стандартный вывод
original_stdout = sys.stdout

# Перенаправляем стандартный вывод
sys.stdout = dummy_out



# Отключение предупреждений
warnings.filterwarnings("ignore")

warnings.filterwarnings("ignore", category=FutureWarning)


# Загрузка модели и дальнейшие действия


def read_input_json(json_file):
    with open(json_file, 'r') as file:
        data = json.load(file)
    return data

# Пример использования
input_data = read_input_json('input.json')

df_input = gf_input.GetInputFrame(input_data)

del df_input['cheater_value']



# pd.DataFrame(sessions_frame.iloc[0]).transpose()


model = tf.keras.models.load_model('fraud_detection_model.h5')



model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])


result_lists = []

for i in range(df_input.shape[0]):
    data_frameee = pd.DataFrame(df_input.iloc[i]).transpose()

    predictions = model.predict(data_frameee)
    rounded_prediction = round(float(predictions[0][0]), 3)

    result_lists.append(rounded_prediction)



# Восстанавливаем стандартный вывод
sys.stdout = original_stdout

# Теперь можно получить вывод, если это необходимо
output = dummy_out.getvalue()

# Закрываем объект перенаправления вывода
dummy_out.close()
    


def modify_list(lst):
    if any(x > 0.4 for x in lst):
        return [0.95] + lst
    else:
        max_value = max(lst)
        return [max_value] + lst

print(modify_list(result_lists))